Shiny
Shiny is an R package that makes it easy to build interactive web apps straight from R. You can host standalone apps on a webpage or embed them in R Markdown documents or build dashboards. You can also extend your Shiny apps with CSS themes, htmlwidgets, and JavaScript actions.
Shiny is most often used with the packages “shinydashboard” or “flexdashboard” to build interactive dashboards. We will walk through how to use both shinydashboard and flexdashboard to give you options when using shiny.
Shiny dashboard structure (UI - user interface)
3 Main parts:
- Header - dashboardHeader()
- Sidebar - dashboardSidebar()
- Body - dashboardBody()
Render Functions
Functions that you use in your application’s server side code, assigning them to outputs that appear in your user interface.
- renderPrint()
- renderText()
- renderPlot()
- renderUI() # HTML or a shiny tag object
Example Using Star Wars df
library(shiny)
library(tidyverse)
library(shinydashboard)
sidebar <- dashboardSidebar(
selectInput(
inputId = "name",
label = "Favorite Character",
choices = c(starwars$name)
)
)
body <- dashboardBody(
textOutput("name")
)
ui <- dashboardPage(header = dashboardHeader(),
sidebar = sidebar,
body = body
)
server <- function(input, output) {
output$name <- renderText({
input$name
})
}
shinyApp(ui, server)
Flexdashboard
Flexdashboard is a similar dashboard system as shiny. A flexdashboard is filled with charts. To create a flexdashboard, you will first need to adjust the YAML header.
title: “title of document” output: flexdashboard::flex_dashboard
Now your Rmarkdown file will be interpreted as a flexdashboard file.
The flexdashboard default layout is in columns. To separate the columns, you will use the following syntax:
library(flexdashboard)
Column
Chart A
Column
Chart B
Chart C
LS0tDQp0aXRsZTogIlNoaW55IFdhbGt0aHJvdWdoIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyBTaGlueQ0KDQpTaGlueSBpcyBhbiBSIHBhY2thZ2UgdGhhdCBtYWtlcyBpdCBlYXN5IHRvIGJ1aWxkIGludGVyYWN0aXZlIHdlYiBhcHBzIHN0cmFpZ2h0IGZyb20gUi4gWW91IGNhbiBob3N0IHN0YW5kYWxvbmUgYXBwcyBvbiBhIHdlYnBhZ2Ugb3IgZW1iZWQgdGhlbSBpbiBSIE1hcmtkb3duIGRvY3VtZW50cyBvciBidWlsZCBkYXNoYm9hcmRzLiBZb3UgY2FuIGFsc28gZXh0ZW5kIHlvdXIgU2hpbnkgYXBwcyB3aXRoIENTUyB0aGVtZXMsIGh0bWx3aWRnZXRzLCBhbmQgSmF2YVNjcmlwdCBhY3Rpb25zLg0KDQpTaGlueSBpcyBtb3N0IG9mdGVuIHVzZWQgd2l0aCB0aGUgcGFja2FnZXMgInNoaW55ZGFzaGJvYXJkIiBvciAiZmxleGRhc2hib2FyZCIgdG8gYnVpbGQgaW50ZXJhY3RpdmUgZGFzaGJvYXJkcy4gV2Ugd2lsbCB3YWxrIHRocm91Z2ggaG93IHRvIHVzZSBib3RoIHNoaW55ZGFzaGJvYXJkIGFuZCBmbGV4ZGFzaGJvYXJkIHRvIGdpdmUgeW91IG9wdGlvbnMgd2hlbiB1c2luZyBzaGlueS4NCg0KDQojIyBTaGlueSBkYXNoYm9hcmQgc3RydWN0dXJlIChVSSAtIHVzZXIgaW50ZXJmYWNlKQ0KDQozIE1haW4gcGFydHM6DQoNCiogSGVhZGVyIC0gZGFzaGJvYXJkSGVhZGVyKCkNCiogU2lkZWJhciAtIGRhc2hib2FyZFNpZGViYXIoKQ0KKiBCb2R5IC0gZGFzaGJvYXJkQm9keSgpDQoNCg0KIyMjIEhvdyB0byBidWlsZCBhIFNpZGViYXIgRGFzaGJvYXJkDQoNCmBgYHtyfQ0KbGlicmFyeShzaGlueWRhc2hib2FyZCkNCg0Kc2lkZWJhciA8LSBkYXNoYm9hcmRTaWRlYmFyKA0KICBzaWRlYmFyTWVudSgNCiAgICBtZW51SXRlbSgiRGF0YSIsDQogICAgICB0YWJOYW1lID0gImRhdGEiKSAjVXNlZCBmb3IgbGlua2luZyBpbiB0aGUgYm9keQ0KICApDQopDQpgYGANCg0KDQpZb3UgY2FuIGFsc28gaGF2ZSB1c2VycyBpbnB1dCBpbmZvcm1hdGlvbiAtIA0KRGlmZmVyZW50IGlucHV0IGZ1bmN0aW9uczoNCiogc2VsZWN0SW5wdXQoKSAjIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBhIHNpbmd1bGFyIGl0ZW0gZnJvbSBhIGxpc3QNCiogdGV4dElucHV0KCkgIyBBbGxvd3MgdXNlciB0byBpbnB1dCB0ZXh0DQoqIGRhdGVJbnB1dCgpICMgQWxsb3dzIHVzZXIgdG8gaW5wdXQgYSBkYXRlDQoqIGNoZWNrYm94SW5wdXQoKSAjIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBtdWx0aXBsZSBpdGVtcw0KDQoNCiMjIyBIb3cgdG8gYnVpbGQgdXNlciBpbnB1dCB3aXRoIHNoaW55ZGFzaGJvYXJkDQoNCmBgYHtyfQ0KbGlicmFyeSgic2hpbnkiKQ0KbGlicmFyeSgidGlkeXZlcnNlIikNCnNlbGVjdElucHV0KA0KICBpbnB1dElkID0gIm9iamVjdCIsICMgVGhpcyBpcyB0aGUgbmFtZSB5b3UgZGVzY3JpYmVkIHRoZSBvYmplY3QgZWxzZXdoZXJlIGluIHRoZSBhcHBsaWNhdGlvbg0KICBsYWJlbCA9ICJGYXZvcml0ZSBDaGFyYWN0ZXIiLCAjIFRoZSBsYWJlbCB5b3Ugd2FudCB0byBzaG93IHRvIHRoZSB1c2VyDQogIGNob2ljZXMgPSBjKHN0YXJ3YXJzJG5hbWUpICMgTGlzdCB0aGUgY2hvaWNlcyB0aGUgdXNlciBoYXMgdG8gcGljayBmcm9tDQogKQ0KYGBgDQoNCg0KIyMjIFJlbmRlciBGdW5jdGlvbnMgDQpGdW5jdGlvbnMgdGhhdCB5b3UgdXNlIGluIHlvdXIgYXBwbGljYXRpb24ncyBzZXJ2ZXIgc2lkZSBjb2RlLCBhc3NpZ25pbmcgdGhlbSB0byBvdXRwdXRzIHRoYXQgYXBwZWFyIGluIHlvdXIgdXNlciBpbnRlcmZhY2UuDQoNCiogcmVuZGVyUHJpbnQoKQ0KKiByZW5kZXJUZXh0KCkNCiogcmVuZGVyUGxvdCgpDQoqIHJlbmRlclVJKCkgIyBIVE1MIG9yIGEgc2hpbnkgdGFnIG9iamVjdA0KDQojIyBFeGFtcGxlIFVzaW5nIFN0YXIgV2FycyBkZg0KYGBge3J9DQpsaWJyYXJ5KHNoaW55KQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHNoaW55ZGFzaGJvYXJkKQ0KDQpzaWRlYmFyIDwtIGRhc2hib2FyZFNpZGViYXIoDQogIHNlbGVjdElucHV0KA0KICAgIGlucHV0SWQgPSAibmFtZSIsDQogICAgbGFiZWwgPSAiRmF2b3JpdGUgQ2hhcmFjdGVyIiwNCiAgICBjaG9pY2VzID0gYyhzdGFyd2FycyRuYW1lKQ0KICApDQopDQoNCmJvZHkgPC0gZGFzaGJvYXJkQm9keSgNCiAgdGV4dE91dHB1dCgibmFtZSIpDQopDQoNCnVpIDwtIGRhc2hib2FyZFBhZ2UoaGVhZGVyID0gZGFzaGJvYXJkSGVhZGVyKCksDQogICAgICAgICAgICAgICAgICAgIHNpZGViYXIgPSBzaWRlYmFyLA0KICAgICAgICAgICAgICAgICAgICBib2R5ID0gYm9keQ0KICAgICAgICAgICAgICAgICAgICApDQoNCnNlcnZlciA8LSBmdW5jdGlvbihpbnB1dCwgb3V0cHV0KSB7DQogIG91dHB1dCRuYW1lIDwtIHJlbmRlclRleHQoew0KICAgICAgaW5wdXQkbmFtZQ0KICAgIH0pDQp9DQoNCnNoaW55QXBwKHVpLCBzZXJ2ZXIpDQoNCmBgYA0KDQoNCiMgRmxleGRhc2hib2FyZA0KDQpGbGV4ZGFzaGJvYXJkIGlzIGEgc2ltaWxhciBkYXNoYm9hcmQgc3lzdGVtIGFzIHNoaW55LiBBIGZsZXhkYXNoYm9hcmQgaXMgZmlsbGVkIHdpdGggY2hhcnRzLiBUbyBjcmVhdGUgYSBmbGV4ZGFzaGJvYXJkLCB5b3Ugd2lsbCBmaXJzdCBuZWVkIHRvIGFkanVzdCB0aGUgWUFNTCBoZWFkZXIuDQoNCnRpdGxlOiAidGl0bGUgb2YgZG9jdW1lbnQiDQpvdXRwdXQ6IA0KICBmbGV4ZGFzaGJvYXJkOjpmbGV4X2Rhc2hib2FyZA0KICANCk5vdyB5b3VyIFJtYXJrZG93biBmaWxlIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBmbGV4ZGFzaGJvYXJkIGZpbGUuDQoNClRoZSBmbGV4ZGFzaGJvYXJkIGRlZmF1bHQgbGF5b3V0IGlzIGluIGNvbHVtbnMuIFRvIHNlcGFyYXRlIHRoZSBjb2x1bW5zLCB5b3Ugd2lsbCB1c2UgdGhlIGZvbGxvd2luZyBzeW50YXg6DQoNCmBgYHtyfQ0KbGlicmFyeShmbGV4ZGFzaGJvYXJkKQ0KYGBgDQoNCkNvbHVtbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyMgQ2hhcnQgQQ0KYGBge3J9DQoNCmBgYA0KDQpDb2x1bW4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIyBDaGFydCBCDQpgYGB7cn0NCg0KYGBgDQoNCiMjIENoYXJ0IEMNCmBgYHtyfQ0KDQpgYGANCg0KDQoNCg0KDQoNCg==